package es.analisis.algoritmos;


class Main {

	public static void main(String[] args) {
		Integer n; // Variable para almacenar el tamanyo de la instancia

		if(args.length < 2) {
			System.out.println("MODO DE USO: ");
			System.out.println(" -g N: Para generar 5 ficheros de prueba de tamaño N");
			System.out.println(" -s N: Carga 5 ficheros de instancias y aplica los algoritmos de resolucion");
			return;
		}
		switch(args[0]){
		// La opcion -g genera 5 instancias de tamaño n y luego aplica los algoritmos
			case "-g" : n = new Integer(args[1]);
						System.out.println("Generamos 5 instancias de tamanyo: "+n);
						for(int i = 1; i <= 5; i++){
							String fileName = "instancia_"+n+"_"+i+".dat";
							ListaObjetos nueva = new ListaObjetos();
							nueva.generarInstancia(fileName, n);

							System.out.println("Fichero creado: "+fileName);
						}
						break;
		// La opcion -s carga las instancias de un fichero y luego aplica los algoritmos para resolver el problema de la mochila
			case "-s" : 
						n = new Integer(args[1]);
						System.out.println("Resolvemos 5 instancias de tamanyo: "+n);
						long tiempoAntes;
						long tiempoDespues;
						//for(int i = 1; i <= 5; i++){
							ListaObjetos nueva = new ListaObjetos();
							//String fileName = "instancia_"+n+"_"+i+".dat";
                            String fileName = "prueba.dat";
							System.out.println("Cargamos el fichero: "+ fileName);
							nueva.cargarInstancia(fileName);
							nueva.ordenar();

							int resultado;
							tiempoAntes = 0;
							tiempoDespues = 0;
							tiempoAntes = System.currentTimeMillis();
							resultado = Algoritmos.greedy(nueva);
							tiempoDespues = System.currentTimeMillis();
							System.out.println("Valor resultante instancia "+fileName+ "(Greedy): "+resultado);
							System.out.println("Tiempo transcurrido: "+ (tiempoDespues-tiempoAntes) + "ms");

							tiempoAntes = 0;
							tiempoDespues = 0; 
							tiempoAntes = System.currentTimeMillis();
							resultado = Algoritmos.progDinamica(nueva);
							System.out.println("Valor resultante instancia "+fileName+ "(Prog. Dinamica): "+resultado);
							tiempoDespues = System.currentTimeMillis();
							System.out.println("Tiempo transcurrido: "+ (tiempoDespues-tiempoAntes) + "ms");
							tiempoAntes = 0;
							tiempoDespues = 0; 
							
							tiempoAntes = 0;
							tiempoDespues = 0; 
							tiempoAntes = System.currentTimeMillis();
							double resultadoRyP = Algoritmos.KSBack(nueva);
							System.out.println("Valor resultante instancia "+fileName+ "(Ramificacion y Poda): "+resultadoRyP);
							tiempoDespues = System.currentTimeMillis();
							System.out.println("Tiempo transcurrido: "+ (tiempoDespues-tiempoAntes) + "ms");
							tiempoAntes = 0;
							tiempoDespues = 0; 
						//}
						break;
			default : 	System.out.println("Opcion no reconocida");
						break;
		}
		
	}
	
	
}
